package Model.Gates;

import Model.Main.Wire;
import java.util.logging.Level;

/**
 *
 ** @author citromos ezustfoka
 */
public class OrGate extends Gate {

    /**
     * konstruktor
     * @return
     *
     */
    public OrGate(String Name) {
        this.name = name;
        maxInputs = 2;
        this.reset();
        logger.log(Level.CONFIG, "" + this.getClass().getName() + " " + this.getName() + " created with " + maxInputs + " input(s).");
        /**
         * Inicializáljuk az inputsWired listát.
         */
        initInputsWired();
    }

    public OrGate(int maxInputs, String name) {
        this.name = name;
        this.maxInputs = maxInputs;
        this.reset();
        logger.log(Level.CONFIG, "" + this.getClass().getName() + " " + this.getName() + " created with " + this.maxInputs + " input(s).");
        /**
         * Inicializáljuk az inputsWired listát.
         */
        initInputsWired();
    }

    /**
     * A bemenet értékének beállítása. A bemenet száma és az érték a paraméter.
     * Ezt hívja meg a wire. Ez fogja meghívni a wire sendvalue függvényét.
     * @param inputNumber Beállítandó bemenet száma
     * @param val Beállítandó bemenet értéke
     * @return
     *
     */
    @Override
    public void setInput(int inputNumber, Boolean val) throws Exception {
        super.setInput(inputNumber, val);
        Boolean send = true;
        if (val == false) {
            this.val = false;
            logger.log(Level.FINEST, "" + this.getClass().getName() + " " + this.getName() + " has value " + this.val + " and sending out on wire " + this.outputWire + ".");
            for (Boolean values : inputs) {
                if (values == true) {
                    this.val = true;
                }
            }
        } else {
            this.val = true;
            logger.log(Level.FINEST, "" + this.getClass().getName() + " " + this.getName() + " has value " + this.val + " and sending out on wire " + this.outputWire + ".");
        }
        // elküldöm az értéket
        outputWireSendValue();
    }
}
